struct _GtkBorderImage {
cairo_pattern_t *source;
- GtkGradient *source_gradient;
+ gpointer source_boxed;
+ GType boxed_type;
GtkBorder slice;
GtkBorder *width;
}
GtkBorderImage *
-_gtk_border_image_new_for_gradient (GtkGradient *gradient,
- GtkBorder *slice,
- GtkBorder *width,
- GtkCssBorderImageRepeat *repeat)
+_gtk_border_image_new_for_boxed (GType boxed_type,
+ gpointer boxed,
+ GtkBorder *slice,
+ GtkBorder *width,
+ GtkCssBorderImageRepeat *repeat)
{
GtkBorderImage *image;
image = g_slice_new0 (GtkBorderImage);
+
image->ref_count = 1;
- if (gradient != NULL)
- image->source_gradient = gtk_gradient_ref (gradient);
+ if (boxed != NULL)
+ image->source_boxed = g_boxed_copy (boxed_type, boxed);
+ image->boxed_type = boxed_type;
if (slice != NULL)
image->slice = *slice;
if (image->source != NULL)
cairo_pattern_destroy (image->source);
- if (image->source_gradient != NULL)
- gtk_gradient_unref (image->source_gradient);
+ if (image->source_boxed != NULL)
+ g_boxed_free (image->boxed_type, image->source_boxed);
if (image->width != NULL)
gtk_border_free (image->width);
parameter[0].name = "border-image-source";
if ((image != NULL) &&
- (image->source_gradient != NULL))
- g_value_init (¶meter[0].value, GTK_TYPE_GRADIENT);
+ (image->source_boxed != NULL))
+ g_value_init (¶meter[0].value, image->boxed_type);
else
g_value_init (¶meter[0].value, CAIRO_GOBJECT_TYPE_PATTERN);
if (image != NULL)
{
- if (image->source_gradient != NULL)
- g_value_set_boxed (¶meter[0].value, image->source_gradient);
+ if (image->source_boxed != NULL)
+ g_value_set_boxed (¶meter[0].value, image->source_boxed);
else
g_value_set_boxed (¶meter[0].value, image->source);
{
GValue temp = G_VALUE_INIT;
cairo_pattern_t *pattern = NULL;
- GtkGradient *gradient = NULL;
+ gconstpointer *boxed = NULL;
+ GType boxed_type;
GtkBorder slice, *width = NULL, *parsed_slice;
GtkCssBorderImageRepeat repeat, *parsed_repeat;
gboolean retval = FALSE;
if (!pattern_value_parse (parser, base, &temp))
return FALSE;
- if (G_VALUE_TYPE (&temp) == GTK_TYPE_GRADIENT)
- gradient = g_value_dup_boxed (&temp);
+ boxed_type = G_VALUE_TYPE (&temp);
+ if (boxed_type != CAIRO_GOBJECT_TYPE_PATTERN)
+ boxed = g_value_dup_boxed (&temp);
else
pattern = g_value_dup_boxed (&temp);
g_value_unset (&temp);
- if (gradient != NULL)
- image = _gtk_border_image_new_for_gradient (gradient, &slice, width, &repeat);
+ if (boxed != NULL)
+ image = _gtk_border_image_new_for_boxed (boxed_type, boxed, &slice, width, &repeat);
else if (pattern != NULL)
image = _gtk_border_image_new (pattern, &slice, width, &repeat);
if (pattern != NULL)
cairo_pattern_destroy (pattern);
- if (gradient != NULL)
- gtk_gradient_unref (gradient);
+ if (boxed != NULL)
+ g_boxed_free (boxed_type, boxed);
if (width != NULL)
gtk_border_free (width);